JavaScriptã®åçã€ã³ããŒããã³ãŒãåå²ãé å»¶èªã¿èŸŒã¿æŠç¥ã掻çšããã°ããŒãã«ãªWebã¢ããªã®ããã©ãŒãã³ã¹ãæé©åããæ¹æ³ã解説ãå®è·µäŸãéããŠåæèªã¿èŸŒã¿æéãççž®ããUXãåäžãããŸãã
JavaScriptã®åçã€ã³ããŒãïŒã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ããã¹ã¿ãŒããã°ããŒãã«ããã©ãŒãã³ã¹ãæé©å
仿¥ã®ãŸããŸãçžäºæ¥ç¶ãããããžã¿ã«ç°å¢ã«ãããŠãã·ãŒã ã¬ã¹ã§ããã©ãŒãã³ã¹ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã¯æãéèŠã§ããWebã¢ããªã±ãŒã·ã§ã³ãç¹ã«ã°ããŒãã«ã«å±éããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãåæèªã¿èŸŒã¿æéãæå°éã«æãããªãœãŒã¹æ¶è²»ãæé©åããããšã¯æåã®ããã®éèŠãªèŠçŽ ã§ããããã§ãäž»ã«åçã€ã³ããŒãã«ããã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ã®ããã®JavaScriptã®åŒ·åãªæ©èœã掻èºããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ããããã®æŠå¿µãæ·±ãæãäžããäžçäžã®ãªãŒãã£ãšã³ã¹ã«å¯Ÿå¿ãããããé«éã§å¹ççãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ç¥èãšæŠç¥ãæäŸããŸãã
巚倧ãªJavaScriptãã³ãã«ãšãã課é¡
Webã¢ããªã±ãŒã·ã§ã³ãè€éã«ãªãã«ã€ããŠããã®JavaScriptã³ãŒãããŒã¹ãå¢å€§ããŸããçŸä»£ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãè±å¯ãªæ©èœãæäŸããããã«å€æ°ã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãã«ã¹ã¿ã ã¢ãžã¥ãŒã«ã«äŸåããããšããããããŸããé©åãªç®¡çããªããã°ãã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¿ã©ã¯ãã£ãã«ãªãåã«ããã©ãŠã¶ãããŠã³ããŒããè§£æãå®è¡ããå¿ èŠãããåäžã®å·šå€§ãªJavaScriptãã³ãã«ãçãŸããå¯èœæ§ããããŸãããã®çŸè±¡ã¯ãã°ãã°ãJavaScriptã®è¥å€§åããšåŒã°ããç¹ã«ã€ã³ã¿ãŒãããæ¥ç¶ãé ãããŸãã¯æ§èœã®äœãããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠãããã€ãã®æå®³ãªåœ±é¿ãåãŒããŸãã
- åæèªã¿èŸŒã¿æéã®å¢å ïŒãŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã䜿çšå¯èœã«ãªããŸã§é·ãåŸ ãããããã©ã¹ãã¬ãŒã·ã§ã³ãé¢è±çã®äžæã«ã€ãªããå¯èœæ§ããããŸãã
- ããŒã¿æ¶è²»éã®å¢å ïŒå€§ããªãã³ãã«ã¯ããå€ãã®åž¯åå¹ ãæ¶è²»ããããŒã¿ãã©ã³ãéãããŠããããŸãã¯é«äŸ¡ãªå°åã®ãŠãŒã¶ãŒã«ãšã£ãŠå€§ããªéå£ãšãªãåŸãŸãã
- è§£æãšå®è¡ã®é å»¶ïŒããŠã³ããŒãåŸãã倧ããªJavaScriptãã¡ã€ã«ã¯ãã©ãŠã¶ã®ã¡ã€ã³ã¹ã¬ãããå æããã¬ã³ããªã³ã°ãšã€ã³ã¿ã©ã¯ãã£ãæ§ãé ãããå¯èœæ§ããããŸãã
- ã¢ãã€ã«ããã€ã¹ã§ã®ããã©ãŒãã³ã¹äœäžïŒã¢ãã€ã«ããã€ã¹ã¯åŠçèœåãäœãããããã¯ãŒã¯é床ãé ãããšãå€ãããã倧ããªãã³ãã«ã®æªåœ±é¿ãåãããããªããŸãã
ãããã®èª²é¡ã«å¯ŸåŠãããããéçºè ãã¡ã¯JavaScriptã³ãŒããããå°ãã管çãããããã£ã³ã¯ã«åå²ããå¿ èŠãªãšãã«å¿ èŠãªå Žæã§ã®ã¿èªã¿èŸŒãæè¡ã«ç®ãåããŸããããããã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ã®æ žãšãªãååã§ãã
ã³ãŒãåå²ã®çè§£
ã³ãŒãåå²ãšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããåäžã®ã¢ããªã·ãã¯ãªãã³ãã«ã§ã¯ãªããè€æ°ã®å°ããªãã¡ã€ã«ïŒãã£ã³ã¯ïŒã«åå²ããæè¡ã§ãããããã®ãã£ã³ã¯ã¯ãªã³ããã³ãã§èªã¿èŸŒãããšãã§ããæåã«ããŠã³ããŒãããã³åŠçããå¿ èŠãããJavaScriptã®éãå€§å¹ ã«åæžããŸããã³ãŒãåå²ã®äž»ãªç®æšã¯ãçŸåšã®ãã¥ãŒãæ©èœã«äžå¯æ¬ ãªã³ãŒãã®ã¿ãæåã«èªã¿èŸŒãããã«ããããšã§ãåæèªã¿èŸŒã¿ããã©ãŒãã³ã¹ãåäžãããããšã§ãã
WebpackãRollupãParcelãªã©ã®çŸä»£ã®JavaScriptãã³ãã©ã¯ãã³ãŒãåå²ã匷åã«ãµããŒãããŠããŸãããããã¯ã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãåæããããŸããŸãªæŠç¥ã«åºã¥ããŠã³ãŒããåå²ããæ©äŒãèªåçã«ç¹å®ã§ããŸãã
äžè¬çãªã³ãŒãå岿Šç¥
ãã³ãã©ã¯ãã³ãŒãåå²ãå®çŸããããã«ããã°ãã°ä»¥äžã®æŠç¥ãæ¡çšããŸãã
- ãšã³ããªãŒãã€ã³ãïŒãã³ãã©ã®èšå®ã§è€æ°ã®ãšã³ããªãŒãã€ã³ããå®çŸ©ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåïŒäŸïŒç®¡çããã«ãšå ¬éãµã€ãïŒããšã«å¥ã ã®ãã³ãã«ãäœæã§ããŸãã
- `import()`颿°ïŒåçã€ã³ããŒãïŒïŒããã¯ã³ãŒãåå²ã®ããã®æã匷åã§æè»ãªæ¹æ³ã§ããå®è¡æã«ã¢ãžã¥ãŒã«ãåçã«ã€ã³ããŒãããããšãã§ããŸãã
- ãã³ããŒåå²ïŒãµãŒãããŒãã£ã®ã©ã€ãã©ãªïŒãã³ããŒïŒãã¢ããªã±ãŒã·ã§ã³ã®ã«ã¹ã¿ã ã³ãŒãããåé¢ããŸãããã³ããŒã³ãŒãã¯ã¢ããªã±ãŒã·ã§ã³ã³ãŒãããã倿Žé »åºŠãäœãããšãå€ãããããã©ãŠã¶ã«ãããã£ãã·ã¥ããã广çã«è¡ãããšããå©ç¹ããããŸãã
- ã«ãŒãããŒã¹ã®åå²ïŒã¢ããªã±ãŒã·ã§ã³å ã®ç°ãªãã«ãŒãã«åºã¥ããŠã³ãŒããåå²ããŸãããŠãŒã¶ãŒãç¹å®ã®ã«ãŒãã«ç§»åãããšãã«ããã®ã«ãŒãã«å¿ èŠãªJavaScriptã®ã¿ãèªã¿èŸŒãŸããŸãã
åçã€ã³ããŒãïŒimport()ïŒã®å
åçã€ã³ããŒããåºãæ¡çšããã以åã¯ãã³ãŒãåå²ã¯ãã°ãã°ãã³ãã©åºæã®èšå®ãæåã§ã®ã³ãŒãåå²ã«äŸåããŠããŸããããã€ãã£ãã®JavaScriptæ©èœïŒããã³æšæºåãããããããŒã¶ã«ïŒã§ããimport()颿°ã¯ãã¢ãžã¥ãŒã«ã¬ãã«ã§ã³ãŒãåå²ãšé
å»¶èªã¿èŸŒã¿ã宣èšçãã€ç°¡åãªæ¹æ³ã§å®è£
ããããšã«ããããããé©åœçã«å€ããŸããã
éçãª`import`æãè§£ææã«åŠçãããæå®ããããã¹ãŠã®ã¢ãžã¥ãŒã«ããã³ãã«ã«å«ããã®ãšã¯ç°ãªããåçãª`import()`æã¯å®è¡æã«å®è¡ãããŸããããã¯ã`import()`ã§æå®ãããã¢ãžã¥ãŒã«ãããã®ã³ãŒãè¡ã«å°éãããšãã«ã®ã¿ãã§ãããããèªã¿èŸŒãŸããããšãæå³ããŸãã
æ§æãšäœ¿çšæ³
åçã€ã³ããŒãã®æ§æã¯æ¬¡ã®ãšããã§ãã
import('./path/to/module.js').then(module => {
// Use the module.default or module.namedExport
module.doSomething();
}).catch(error => {
// Handle any errors during module loading
console.error('Failed to load module:', error);
});
ãã®äŸãåè§£ããŠã¿ãŸãããã
- `import('./path/to/module.js')`ïŒãããåçã€ã³ããŒãã®äžæ žã§ããããã¯Promiseãè¿ããã¢ãžã¥ãŒã«ãèªã¿èŸŒãŸãããšãã®ã¢ãžã¥ãŒã«ãªããžã§ã¯ãã§è§£æ±ºãããŸãããã¹ã¯æååãªãã©ã«ãŸãã¯å€æ°ã«ããããšãã§ããéåžžã«é«ãæè»æ§ãæäŸããŸãã
- `.then(module => { ... })`ïŒãã®ã³ãŒã«ããã¯é¢æ°ã¯ãPromiseãæ£åžžã«è§£æ±ºããããšãã«å®è¡ãããŸãã`module`ãªããžã§ã¯ãã«ã¯ãã€ã³ããŒããããã¢ãžã¥ãŒã«ã®ãšã¯ã¹ããŒããããã¡ã³ããŒãå«ãŸããŠããŸããã¢ãžã¥ãŒã«ã`export default`ã䜿çšããŠããå Žåã¯`module.default`çµç±ã§ã¢ã¯ã»ã¹ããååä»ããšã¯ã¹ããŒãã®å Žåã¯`module.namedExport`ãšããŠçŽæ¥ã¢ã¯ã»ã¹ããŸãã
- `.catch(error => { ... })`ïŒãã®ã³ãŒã«ããã¯ã¯ãã¢ãžã¥ãŒã«ã®ãã§ãããŸãã¯è§£æäžã«çºçãããšã©ãŒãåŠçããŸããããã¯å ç¢ãªãšã©ãŒãã³ããªã³ã°ã«ãšã£ãŠéåžžã«éèŠã§ãã
åçã€ã³ããŒãã¯éåæã§ãã
åçã€ã³ããŒãã¯æ¬è³ªçã«éåæã§ããããšãèŠããŠããããšãéèŠã§ãããããã¯ã¡ã€ã³ã¹ã¬ããããããã¯ããŸããããã©ãŠã¶ã¯ããã¯ã°ã©ãŠã³ãã§ã¢ãžã¥ãŒã«ã®ããŠã³ããŒããéå§ããã¢ããªã±ãŒã·ã§ã³ã¯å®è¡ãç¶ç¶ããŸããã¢ãžã¥ãŒã«ã®æºåãã§ãããšãã«ã`.then()`ã³ãŒã«ããã¯ãåŒã³åºãããŸãã
åçã€ã³ããŒãã§ã®async/awaitã®äœ¿çš
åçã€ã³ããŒãã®éåæçãªæ§è³ªã¯ã`async/await`ãšã®äœ¿çšã«æé©ã§ãããããã¯ãªãŒã³ã§èªã¿ãããã³ãŒãã«ã€ãªãããŸãã
async function loadAndUseModule() {
try {
const module = await import('./path/to/module.js');
module.doSomething();
} catch (error) {
console.error('Failed to load module:', error);
}
}
loadAndUseModule();
ãã®`async/await`æ§æã¯ããã®æå¿«ãããäžè¬çã«å¥œãŸããŸãã
åçã€ã³ããŒãã«ããé å»¶èªã¿èŸŒã¿æŠç¥
é å»¶èªã¿èŸŒã¿ïŒã¬ã€ãžãŒããŒãã£ã³ã°ïŒãšã¯ãéèŠã§ãªããªãœãŒã¹ã®èªã¿èŸŒã¿ããå®éã«å¿ èŠã«ãªããŸã§å»¶æããææ³ã§ããåçã€ã³ããŒãã¯ãJavaScriptã§å¹æçãªé å»¶èªã¿èŸŒã¿æŠç¥ãå®è£ ããããã®åºç€ãšãªããŸãã
1. ã«ãŒãããŒã¹ã®é å»¶èªã¿èŸŒã¿
ããã¯åçã€ã³ããŒãã®æãäžè¬çã§åœ±é¿åã®ããå¿çšã®äžã€ã§ããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã«ãŒããåäžã®JavaScriptãã¡ã€ã«ã«ãã³ãã«ãã代ããã«ããŠãŒã¶ãŒãåã«ãŒãã«ç§»åãããšãã«ã®ã¿ããã®ã«ãŒãã®ã³ãŒããèªã¿èŸŒãããšãã§ããŸãã
React Routerã§ã®äŸïŒ
import React, { Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
// Use React.lazy for component lazy loading
const HomePage = React.lazy(() => import('./pages/HomePage'));
const AboutPage = React.lazy(() => import('./pages/AboutPage'));
const ContactPage = React.lazy(() => import('./pages/ContactPage'));
function App() {
return (
{/* Suspense fallback while components are loading */}
Loading... ãã®Reactã®äŸã§ã¯ïŒ
React.lazy()ã¯ãåçã«èªã¿èŸŒãã¹ãã³ã³ããŒãã³ããå®çŸ©ããããã«äœ¿çšãããŸããããã¯åçãªimport()ãåŒã³åºã颿°ãåŒæ°ã«åããŸããSuspenseã³ã³ããŒãã³ãã¯ãé å»¶èªã¿èŸŒã¿ãããã³ã³ããŒãã³ãããã§ããããã¬ã³ããªã³ã°ãããéã«è¡šç€ºãããã©ãŒã«ããã¯UIïŒäŸïŒããŒãã£ã³ã°ã¹ãããŒïŒãæäŸããŸãã
ãã®ã¢ãããŒãã«ããããŠãŒã¶ãŒã¯èšªããããŒãžã®JavaScriptã®ã¿ãããŠã³ããŒãããããšã«ãªããã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãå€§å¹ ã«æ¹åãããŸãã
2. ã³ã³ããŒãã³ãã®é å»¶èªã¿èŸŒã¿
ååã¬ã³ããªã³ã°æã«ããã«èŠããªãããŸãã¯å¿ èŠãšãããªãåã ã®ã³ã³ããŒãã³ããé å»¶èªã¿èŸŒã¿ããããšãã§ããŸããããã«ã¯ãã¢ãŒãã«ãã€ã¢ãã°ãè€éãªUIãŠã£ãžã§ããããŸãã¯ç¹å®ã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã§ã®ã¿äœ¿çšãããã³ã³ããŒãã³ããå«ãŸããŸãã
äŸïŒã¢ãŒãã«ã³ã³ããŒãã³ãã®é å»¶èªã¿èŸŒã¿
import React, { useState } from 'react';
// Initially, ModalComponent is not imported
// import ModalComponent from './ModalComponent'; // This would be a static import
function MyComponent() {
const [showModal, setShowModal] = useState(false);
// Lazy load the modal component when needed
const loadModal = async () => {
const ModalModule = await import('./ModalComponent');
// Assuming ModalComponent is the default export
ModalModule.default.show(); // Or however your modal is controlled
setShowModal(true);
};
const handleOpenModal = () => {
loadModal();
};
return (
{/* The modal itself will be rendered after being loaded */}
{showModal && (
// In a real scenario, you'd likely have a way to render the modal
// after it's loaded, possibly using a portal.
// This is a conceptual representation.
Modal is loading...
)}
);
}
export default MyComponent;
ãã®æŠå¿µçãªäŸã§ã¯ãModalComponentã¯ãã¿ã³ãã¯ãªãã¯ããããšãã«ã®ã¿ã€ã³ããŒãããããããåæãã³ãã«ãå°ããä¿ã€ããšãã§ããŸãã
3. æ©èœããŒã¹ã®é å»¶èªã¿èŸŒã¿
ããäžã€ã®å¹æçãªæŠç¥ã¯ããã¹ãŠã®ãŠãŒã¶ãŒããã¹ãŠã®ã·ããªãªã§äœ¿çšãããããã§ã¯ãªãæ©èœãã¢ãžã¥ãŒã«å šäœãé å»¶èªã¿èŸŒã¿ããããšã§ããããšãã°ãè€éãªç®¡çããã·ã¥ããŒãæ©èœã¯ç®¡çè ã®ã¿ãå¿ èŠãšãããªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸãã
äŸïŒç®¡çè ã¢ãžã¥ãŒã«ã®é å»¶èªã¿èŸŒã¿
// Inside a user authentication check or a button click handler
async function loadAdminFeature() {
if (currentUser.isAdmin) {
try {
const adminModule = await import(/* webpackChunkName: "admin-feature" */ './admin/AdminDashboard');
adminModule.renderAdminDashboard();
} catch (error) {
console.error('Failed to load admin feature:', error);
}
} else {
console.log('User is not an administrator.');
}
}
/* webpackChunkName: "admin-feature" */ã¯ãWebpackã®ããžãã¯ã³ã¡ã³ãã§ãããçæããããã£ã³ã¯ã«ååãæå®ã§ããããããããã¯ãŒã¯ãªã¯ãšã¹ãããããã°ã§èå¥ãããããªããŸãã
åçã€ã³ããŒããã³ãŒãåå²ãé å»¶èªã¿èŸŒã¿ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ããããã¡ãªãã
ãããã®æŠç¥ãå®è£ ããããšã¯ãç¹ã«ã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ãèæ ®ããå Žåã倧ããªã¡ãªããããããããŸãã
- åæèªã¿èŸŒã¿æéã®ççž®ïŒãããæãçŽæ¥çãªã¡ãªããã§ããåæãã³ãã«ãå°ããã»ã©ãããŠã³ããŒããè§£æãå®è¡ãè¿ éã«ãªããäœéãªãããã¯ãŒã¯ã§ãå¿çæ§ã®é«ãäœéšãæäŸããŸããããã¯ãçºå±éäžåœãã€ã³ã¿ãŒãããã€ã³ãã©ãäžå®å®ãªå°åã®ãŠãŒã¶ãŒã«ãšã£ãŠéåžžã«éèŠã§ãã
- 垯åå¹ æ¶è²»ã®åæžïŒãŠãŒã¶ãŒã¯å¿ èŠãªã³ãŒãã®ã¿ãããŠã³ããŒããããããããŒã¿ãç¯çŽã§ããŸããããã¯ãã¢ãã€ã«ããŒã¿ãé«äŸ¡ãŸãã¯äžéãããå°åã®ãŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã
- ããŒãšã³ãããã€ã¹ã§ã®ããã©ãŒãã³ã¹åäžïŒJavaScriptãå°ãªãã»ã©ãå¿ èŠãªåŠçèœåãå°ãªããªããã¹ããŒããã©ã³ãå€ãã³ã³ãã¥ãŒã¿ã§ã®ããã©ãŒãã³ã¹ãåäžããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒã®åäžïŒé«éã«èªã¿èŸŒãŸããã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®æºè¶³åºŠãé«ãããšã³ã²ãŒãžã¡ã³ããåäžãããé¢è±çãäœäžãããŸããã¹ã ãŒãºãªUXã¯äžçå ±éã®æåŸ ã§ãã
- ããè¯ãSEOïŒæ€çŽ¢ãšã³ãžã³ã¯é«éã«èªã¿èŸŒãŸãããŠã§ããµã€ãã奜ã¿ãŸããèªã¿èŸŒã¿æéãæé©åããããšã¯ãæ€çŽ¢ãšã³ãžã³ã©ã³ãã³ã°ã«è¯ã圱é¿ãäžããå¯èœæ§ããããŸãã
- ããå¹ççãªãªãœãŒã¹æŽ»çšïŒé å»¶èªã¿èŸŒã¿ã«ãããäžèŠãªã³ãŒããèªã¿èŸŒãŸããã®ãé²ããã¯ã©ã€ã¢ã³ããµã€ãã®ã¡ã¢ãªãšCPUãªãœãŒã¹ãç¯çŽããŸãã
é«åºŠãªèæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
åçã€ã³ããŒããšé å»¶èªã¿èŸŒã¿ã¯åŒ·åã§ãããæé©ãªå®è£ ã®ããã«ã¯èæ ®ãã¹ããã¹ããã©ã¯ãã£ã¹ããããŸãã
1. æŠç¥çãªã³ãŒãåå²ãã€ã³ã
ã³ãŒããé床ã«åå²ããªãã§ãã ãããåå²ã¯è¯ãããšã§ãããéåžžã«å°ããªãã£ã³ã¯ãå€ããããšããããã¯ãŒã¯ãªã¯ãšã¹ãããã©ãŠã¶ã®ãã£ãã·ã¥ã®é¢ã§ãªãŒããŒããããå¢å ããããšããããŸããã«ãŒããäž»èŠãªæ©èœããŸãã¯å€§èŠæš¡ãªãµãŒãããŒãã£ã©ã€ãã©ãªãªã©ãåå²ã®ããã®è«ççãªå¢çãç¹å®ããŠãã ããã
2. ãã³ãã©ã®èšå®
ãã³ãã©ã®èœåãæå€§éã«æŽ»çšããŠãã ãããWebpackã®å Žåãæ¬¡ã®ãããªæŠå¿µãçè§£ããããšãéèŠã§ãã
- `optimization.splitChunks`ïŒãã³ããŒã¢ãžã¥ãŒã«ãå ±éã¢ãžã¥ãŒã«ã®èªååå²ã®ããã
- `output.chunkFilename`ïŒãã£ã³ã¯ãã¡ã€ã«åã®çææ¹æ³ãå®çŸ©ããããïŒäŸïŒãã£ãã·ã¥ãã¹ãã£ã³ã°ã®ããã®ã³ã³ãã³ãããã·ã¥ãå«ãïŒã
- `import()`æ§æïŒåçåå²ã®äž»èŠãªæšé²åãšããŠã
åæ§ã«ãRollupãParcelãç¬èªã®å ç¢ãªèšå®ãªãã·ã§ã³ãæäŸããŠããŸãã
3. ãšã©ãŒãã³ããªã³ã°ãšãã©ãŒã«ããã¯
åçã€ã³ããŒãã«ã¯åžžã«é©åãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŠãã ããããããã¯ãŒã¯ã®åé¡ããµãŒããŒãšã©ãŒã«ãããã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ã劚ããããããšããããŸãããã®ãããªå ŽåããŠãŒã¶ãŒã«æå³ã®ãããã©ãŒã«ããã¯UIãã¡ãã»ãŒãžãæäŸããŠãã ããã
async function loadFeature() {
try {
const feature = await import('./feature.js');
feature.init();
} catch (e) {
console.error('Could not load feature', e);
displayErrorMessage('Feature unavailable. Please try again later.');
}
}
4. ããªããŒããšããªãã§ãã
ãŠãŒã¶ãŒãããã«å¿ èŠã«ãªããšäºæ³ãããéèŠãªãªãœãŒã¹ã«ã€ããŠã¯ãããªããŒããŸãã¯ããªãã§ãããæ€èšããŠãã ããããããã®ãã£ã¬ã¯ãã£ãã¯ãéåžžHTMLã®``ããã³``ãä»ããŠå®è£ ããããã©ãŠã¶ãã¢ã€ãã«æéäžã«ãããã®ãªãœãŒã¹ãããã¯ã°ã©ãŠã³ãã§ããŠã³ããŒãã§ããããã«ããåçã€ã³ããŒãã§å¿ èŠã«ãªã£ããšãã«ããå©çšã§ããããã«ããŸãã
ããªãã§ããã«Webpackã®ããžãã¯ã³ã¡ã³ãã䜿çšããäŸïŒ
// When the user is on the homepage, and we know they'll likely navigate to the about page
import(/* webpackPrefetch: true */ './pages/AboutPage');
Webpackã¯ããããã®ã¢ãžã¥ãŒã«ã«å¯ŸããŠHTMLã®headå ã«``ã¿ã°ãçæã§ããŸãã
5. ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒãšãã€ãã¬ãŒã·ã§ã³
ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒã䜿çšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã³ãŒãåå²ã¯ããã«åŸ®åŠãªåé¡ã«ãªããŸãããµãŒããŒã§ã¬ã³ããªã³ã°ãããåæHTMLã«å¿ èŠãªJavaScriptãå¹ççã«èªã¿èŸŒãŸããããã«ããå¿ èŠããããŸããã¯ã©ã€ã¢ã³ããµã€ãã®JavaScriptãèªã¿èŸŒãŸãããšããµãŒããŒã§ã¬ã³ããªã³ã°ãããããŒã¯ã¢ãããããã€ãã¬ãŒããããŸããé å»¶èªã¿èŸŒã¿ã¯ãåæã®ãµãŒããŒã¬ã³ããªã³ã°ã§ããã«èŠããªãã³ã³ããŒãã³ãã«é©çšã§ããŸãã
6. ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³
ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ãè€æ°ã®ç¬ç«ãããã«ãã§æ§æãããã¢ããªã±ãŒã·ã§ã³ã®å Žåãã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ïŒWebpack 5以éã®æ©èœïŒã¯é«åºŠãªåçã€ã³ããŒãæ©èœãæäŸããŸããããã«ãããç°ãªãã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãå®è¡æã«ã³ãŒããšäŸåé¢ä¿ãå ±æã§ããç°ãªããªãªãžã³éã§ã¢ãžã¥ãŒã«ãçã«åçã«èªã¿èŸŒãããšãå¯èœã«ãªããŸãã
7. åœéåïŒi18nïŒãšå°ååïŒl10nïŒ
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«æ§ç¯ããå Žåãåœéåã¯éèŠã§ããåçã€ã³ããŒããæŽ»çšããŠãèšèªåºæã®ç¿»èš³ãã¡ã€ã«ãå¿ èŠãªãšãã«ã®ã¿èªã¿èŸŒãããšã§ãããã©ãŒãã³ã¹ãããã«æé©åã§ããŸãã
// Assuming you have a language switcher and a way to store the current language
const currentLanguage = getUserLanguage(); // e.g., 'en', 'fr', 'es'
async function loadTranslations(lang) {
try {
const translations = await import(`./locales/${lang}.json`);
// Apply translations to your app
applyTranslations(translations);
} catch (error) {
console.error(`Failed to load translations for ${lang}:`, error);
// Fallback to a default language or show an error
}
}
loadTranslations(currentLanguage);
ããã«ããããŠãŒã¶ãŒã¯ãã¹ãŠã®å¯èœãªèšèªã§ã¯ãªããéžæããèšèªã®ç¿»èš³ãã¡ã€ã«ã®ã¿ãããŠã³ããŒãããããšã«ãªããŸãã
8. ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
é å»¶èªã¿èŸŒã¿ãããã³ã³ãã³ããã¢ã¯ã»ã·ãã«ã§ããããšã確èªããŠãã ãããã³ã³ãã³ããåçã«èªã¿èŸŒãŸããå Žåãã¹ã¯ãªãŒã³ãªãŒããŒã«é©åã«éç¥ãããã¹ãã§ããç¹ã«ã¢ãŒãã«ãåçãªUIèŠçŽ ã«ã€ããŠã¯ãARIA屿§ã䜿çšãããã©ãŒã«ã¹ç®¡çãæ£ããåŠçãããŠããããšã確èªããŠãã ããã
å®éã®ã°ããŒãã«ãªäºäŸ
å€ãã®äž»èŠãªã°ããŒãã«ãã©ãããã©ãŒã ã¯ãäžçäžã§ãµãŒãã¹ãæäŸããããã«ãã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ã«å€§ããäŸåããŠããŸãã
- Googleæ€çŽ¢ïŒãã®äžæ žã¯é«åºŠã«æé©åãããŠããŸãããããŸããŸãªæ©èœãå®éšçãªã»ã¯ã·ã§ã³ã¯ããŠãŒã¶ãŒãããŒãžãšå¯Ÿè©±ããã«ã€ããŠåçã«èªã¿èŸŒãŸããå¯èœæ§ããããŸãã
- NetflixïŒã³ã³ãã³ãã®é²èЧãéžæã®ããã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãç¹ã«ããŸã䜿çšãããªãæ©èœã¯ãäžçäžã®ããŸããŸãªããã€ã¹ãã€ã³ã¿ãŒãããé床ã§åæäœéšãé«éãã€å¿çæ§é«ãä¿ãããããã«ãé å»¶èªã¿èŸŒã¿ãããå¯èœæ§ãé«ãã§ãã
- Eã³ããŒã¹ãã©ãããã©ãŒã ïŒäŸïŒAmazonãAlibabaïŒïŒåå詳现ããŒãžã«ã¯ãåçã«èªã¿èŸŒã¿å¯èœãªå€ãã®ã³ã³ããŒãã³ãïŒã¬ãã¥ãŒãé¢é£ååã仿§ãªã©ïŒãå«ãŸããŠããããšããããããŸããããã¯ã倿§ãªãããã¯ãŒã¯ç¶æ³ãæã€å·šå€§ãªã°ããŒãã«é¡§å®¢ããŒã¹ã«ãµãŒãã¹ãæäŸããäžã§äžå¯æ¬ ã§ãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒäŸïŒFacebookãInstagramïŒïŒãã£ãŒããã¹ã¯ããŒã«ãããšãæ°ããã³ã³ãã³ãããã§ããããã¬ã³ããªã³ã°ãããŸããããã¯ãäžçäžã®èšå€§ãªéã®ããŒã¿ãšãŠãŒã¶ãŒãåŠçããããã«äžå¯æ¬ ãªããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«ãã£ãŠé§åãããé å»¶èªã¿èŸŒã¿ã®å žåçãªäŸã§ãã
ãããã®äŒæ¥ã¯ãé ããŸãã¯æ±ãã«ããäœéšããç¹ã«ç«¶äºã®æ¿ããã°ããŒãã«åžå Žã§é¡§å®¢ã倱ãããšã«ã€ãªããå¯èœæ§ãããããšãçè§£ããŠããŸããããã©ãŒãã³ã¹ã®æé©åã¯åãªãæè¡çãªæŽç·Žã§ã¯ãªããããžãã¹äžã®å¿ é äºé ã§ãã
çµè«
JavaScriptã®åçã€ã³ããŒãã¯ãã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿æŠç¥ãšçµã¿åãããããšã§ãçŸä»£ã®Webéçºã«äžå¯æ¬ ãªããŒã«ã§ããã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããè³¢ãåå²ãããªã³ããã³ãã§èªã¿èŸŒãããšã«ãããããã©ãŒãã³ã¹ãåçã«åäžããã垯åå¹ ã®æ¶è²»ãåæžããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãã
ãããã®æè¡ãåãå ¥ããããšã¯ãæ©èœãè±å¯ãªã ãã§ãªããå Žæãããã€ã¹ããããã¯ãŒã¯ç¶æ³ã«é¢ä¿ãªãã誰ããããã©ãŒãã³ã¹ããã¢ã¯ã»ã¹ã§ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãæå³ããŸããWebãé²åãç¶ããäžã§ããããã®æé©åæŠç¥ããã¹ã¿ãŒããããšã¯ãç«¶äºåãç¶æããäžçäžã§åè¶ããããžã¿ã«äœéšãæäŸããããã«äžå¯æ¬ ã§ãã
ãŸãã¯èªèº«ã®ã¢ããªã±ãŒã·ã§ã³å ã«ããæ©äŒâããããã«ãŒãã£ã³ã°ãè€éãªã³ã³ããŒãã³ãããŸãã¯å¿ é ã§ã¯ãªãæ©èœâãç¹å®ããããšããå§ããåçã€ã³ããŒãã䜿çšããŠæ®µéçã«é å»¶èªã¿èŸŒã¿ãå®è£ ããŠãã ãããããã©ãŒãã³ã¹ãžã®æè³ã¯ããŠãŒã¶ãŒæºè¶³åºŠãšã¢ããªã±ãŒã·ã§ã³ã®æåãšãã圢ã§ééããªãå ±ãããã§ãããã